package 数组;

/**
 * Author: Zhang Dongwei
 * Date: 2022/3/29 21:45
 * 给定两个大小分别为 m 和 n 的正序（从小到大）数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
 *
 * 算法的时间复杂度应该为 O(log (m+n)) 。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/median-of-two-sorted-arrays
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class 寻找两个正序数组的中位数_4 {
    public static void main(String[] args) {
        System.out.println((3+4)/2);
        System.out.println((3+3)/2);
        int[] nums1 = new int[] {1, 3, 5, 7, 9, 11};
        int[] nums2 = new int[] {0, 2, 4, 6, 8, 10};
        Solution solution = new 寻找两个正序数组的中位数_4().new Solution();
        double res = solution.findMedianSortedArrays(nums1, nums2);
//        System.out.println(res);
    }
    // 自己做的，不对
    class Solution {
        public double findMedianSortedArrays(int[] nums1, int[] nums2) {
            int l1 = nums1.length;
            int l2 = nums2.length;
            int i = 0;
            int j = 0;
            double res = 0.0;
            if((l1+l2)%2 != 0){
                while ((i+j) != ((l1+l2)/2-1)){
                    if(nums1[i] < nums2[j]){
                        if(i < (l1-1)){
                            i = i + 1;
                        }else {
                            j = j + 1;
                        }
                    }else{
                        if(j < (l2-1)){
                            j = j + 1;
                        }else {
                            i = i + 1;
                        }
                    }
                }
                return Math.max(nums1[i], nums2[j]);
            }else{
                while ((i+j) != ((l1+l2)/2-1)){
                    if(nums1[i] < nums2[j]){
                        if(i < (l1-1)){
                            i = i + 1;
                        }else {
                            j = j + 1;
                        }
                    }else{
                        if(j < (l2-1)){
                            j = j + 1;
                        }else {
                            i = i + 1;
                        }
                    }
                }
                res = (double) (nums1[i]+nums2[j])/2;
                return res;
            }
        }
    }
}
